package top.tangyh.lamp.care.common;

import top.tangyh.lamp.care.vo.result.BPatientResultVO;
import top.tangyh.lamp.care.vo.result.FuerInpatientInfoResult;

import java.util.List;

public class BPatientToFuerInpatientConverter {

    public static FuerInpatientInfoResult convert(BPatientResultVO source) {
        if (source == null) {
            return null;
        }

        FuerInpatientInfoResult result = new FuerInpatientInfoResult();

        // 病人识别号对应his唯一病人编号 -> 病人ID
        result.setPatientId(source.getPatientIdent());

        // 住院号 -> 住院号
        result.setInpatientId(source.getHospitalNumber());

        // 姓名 -> 病人姓名
        result.setPatientName(source.getPatientName());

        // 0其他1男2女 -> 性别代码
        result.setSexCode(source.getGender() != null ? source.getGender().toString() : null);

        // 性别代码转为性别描述
        result.setSex(convertGender(source.getGender()));

        // 出生日期 -> 出生日期
        result.setDob(source.getBirthday() != null ? source.getBirthday().toString() : null);

        // 年龄 -> 年龄
        result.setAge(source.getAge() != null ? source.getAge() : 0);

        // 病案号 (暂无对应字段)

        // 血型 -> 血型
        result.setBloodGroup(source.getBloodType());

        // 地址 -> 家庭住址
        result.setAddress(source.getAddress());

        // 身份证号 -> 证件号
        result.setIdNo(source.getIdentCard());

        // 医保卡号 -> 医保卡号
        result.setInsureCardNo(source.getYiBaoCard());

        // 手机号 -> 移动电话
        result.setMobile(source.getPhone());

        // 当前科室id -> 科室代码
        result.setDeptCode(source.getDeptIdent());

        // 病区属性 -> 病区代码
        result.setWardCode(source.getWardIdent());

        // 床号 -> 床号
        result.setBedNo(source.getBedNumber());

        // 出生日期推算年龄 (如已提供年龄字段可省略)

        // 护理等级 -> 护理级别
        result.setNursingLevel(parseNursingLevel(source.getNursingLevel()));

        // (患者绑定的设备列表直接设置)
        result.setPatientBindOutputVO(source.getPatientBindOutputVO());

        return result;
    }

    private static String convertGender(Integer gender) {
        if (gender == null) {
            return "未知";
        }
        switch (gender) {
            case 1:
                return "男";
            case 2:
                return "女";
            default:
                return "其他";
        }
    }

    private static int parseNursingLevel(String nursingLevel) {
        if (nursingLevel == null || nursingLevel.isEmpty()) {
            return 0;
        }
        switch (nursingLevel) {
            case "一级护理":
                return 1;
            case "二级护理":
                return 2;
            case "三级护理":
                return 3;
            default:
                return 0;
        }
    }
}
